/**
 * @file lv_toolbar_demo.c
 *
 */

/*********************
 *      INCLUDES
 *********************/
#include "lvgl.h"
#include "lv_ledstrip.h"
#include "lv_obj_ex.h"

/*********************
 *      DEFINES
 *********************/


/**********************
 *      TYPEDEFS
 **********************/

/**********************
 *  STATIC PROTOTYPES
 **********************/


/**********************
 *  STATIC VARIABLES
 **********************/


/**********************
 *      MACROS
 **********************/

/**********************
 *   GLOBAL FUNCTIONS
 **********************/

static void led1_event_handler(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    if(code == LV_EVENT_CLICKED) {
        lv_obj_t * ledstrip = (lv_obj_t *)lv_event_get_user_data(e);
        lv_obj_align(ledstrip, LV_ALIGN_TOP_MID, 8, 8);
        lv_toolbar_set_align(ledstrip, LV_TOOLBAR_ALIGN_RIGHT);
        lv_ledstrip_off_all(ledstrip);
        lv_ledstrip_on(ledstrip, 0);
        lv_toolbar_update(ledstrip);
    }
}

static void led2_event_handler(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    if(code == LV_EVENT_CLICKED) {
        lv_obj_t * ledstrip = (lv_obj_t *)lv_event_get_user_data(e);
        lv_obj_set_align(ledstrip, LV_ALIGN_TOP_RIGHT);
        lv_obj_align(ledstrip, LV_ALIGN_RIGHT_MID, -8, 8);
        lv_toolbar_set_align(ledstrip, LV_TOOLBAR_ALIGN_BOTTOM);
        lv_ledstrip_off_all(ledstrip);
        lv_ledstrip_on(ledstrip, 1);
        lv_toolbar_update(ledstrip);
    }
}

static void led3_event_handler(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    if(code == LV_EVENT_CLICKED) {
        lv_obj_t * ledstrip = (lv_obj_t *)lv_event_get_user_data(e);
        lv_obj_align(ledstrip, LV_ALIGN_BOTTOM_MID, -8, -8);
        lv_toolbar_set_align(ledstrip, LV_TOOLBAR_ALIGN_RIGHT);
        lv_ledstrip_off_all(ledstrip);
        lv_ledstrip_on(ledstrip, 2);
        lv_toolbar_update(ledstrip);
    }
}

static void led4_event_handler(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    if(code == LV_EVENT_CLICKED) {
        lv_obj_t * ledstrip = (lv_obj_t *)lv_event_get_user_data(e);
        lv_obj_align(ledstrip, LV_ALIGN_LEFT_MID, 8, -8);
        lv_toolbar_set_align(ledstrip, LV_TOOLBAR_ALIGN_BOTTOM);
        lv_ledstrip_off_all(ledstrip);
        lv_ledstrip_on(ledstrip, 3);
        lv_toolbar_update(ledstrip);
    }
}

/*Simulate different colored light strips*/
void lv_ledstrip_demo1(void)
{
    lv_obj_t * ledstrip = lv_ledstrip_create(lv_screen_active());
    lv_ledstrip_set_count(ledstrip, 4);
    lv_obj_set_style_radius(ledstrip, 10, LV_PART_MAIN);
    lv_obj_set_style_outline_width(ledstrip, 2, LV_PART_MAIN);
    lv_obj_set_style_outline_color(ledstrip, lv_palette_main(LV_PALETTE_BLUE), LV_PART_MAIN);
    lv_obj_set_style_outline_pad(ledstrip, 2, LV_PART_MAIN);

    //lv_toolbar_set_start_spacing(ledstrip, 10);
    lv_toolbar_set_mid_spacing(ledstrip, 5);
    lv_obj_align(ledstrip, LV_ALIGN_TOP_MID, 8, 8);
    lv_ledstrip_on(ledstrip, 0);
    lv_led_set_color(lv_toolbar_get_obj(ledstrip, 0),lv_palette_main(LV_PALETTE_RED));
    lv_led_set_color(lv_toolbar_get_obj(ledstrip, 1),lv_palette_main(LV_PALETTE_GREEN));
    lv_led_set_color(lv_toolbar_get_obj(ledstrip, 2),lv_palette_main(LV_PALETTE_BLUE));
    lv_led_set_color(lv_toolbar_get_obj(ledstrip, 3),lv_palette_main(LV_PALETTE_YELLOW));
    //config callback
    lv_obj_add_event_cb(lv_toolbar_get_obj(ledstrip, 0), led1_event_handler, LV_EVENT_CLICKED, ledstrip);
    lv_obj_add_event_cb(lv_toolbar_get_obj(ledstrip, 1), led2_event_handler, LV_EVENT_CLICKED, ledstrip);
    lv_obj_add_event_cb(lv_toolbar_get_obj(ledstrip, 2), led3_event_handler, LV_EVENT_CLICKED, ledstrip);
    lv_obj_add_event_cb(lv_toolbar_get_obj(ledstrip, 3), led4_event_handler, LV_EVENT_CLICKED, ledstrip);
    lv_toolbar_update(ledstrip);
}

static void led_event_handler(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    if(code == LV_EVENT_CLICKED) {
        lv_obj_t * ledstrip = (lv_obj_t *)lv_event_get_user_data(e);
        lv_obj_t *obj = lv_event_get_target_obj(e);
        lv_ledstrip_off_all(ledstrip);
        lv_ledstrip_on(ledstrip, lv_obj_get_index(obj));
        lv_toolbar_update(ledstrip);
    }
}

/*simulate mobile phone screen shift indicator*/
void lv_ledstrip_demo2(void)
{
    lv_obj_t * ledstrip = lv_ledstrip_create(lv_screen_active());
    lv_ledstrip_set_count(ledstrip, 5);
    lv_obj_align(ledstrip, LV_ALIGN_BOTTOM_MID, 8, -20);

    lv_toolbar_set_mid_spacing(ledstrip, 5);
    lv_obj_set_all_attrib2(ledstrip, (lv_obj_fun2_t)lv_obj_set_size, 10, 10);
    lv_ledstrip_on(ledstrip, 2);
    lv_obj_add_all_event_cb(ledstrip, led_event_handler, LV_EVENT_CLICKED, ledstrip);
    lv_toolbar_update(ledstrip);
}
